var express = require("express")
var router = express.Router()
const XLSX = require('xlsx')
const fs = require('fs')
const path = require('path')

var { CustomModel } = require("../model/user")
const { StringDecoder } = require("string_decoder")

router.get("/custom-list", async function (req, res, next) {
  let {pageSize,pageNum} = req.query
  let data = await CustomModel.find()
  let total = data.length

  data = data.slice((pageNum - 1) * pageSize, pageNum * pageSize)
  res.send({
      code: 200,
    list: data,
      total,
      msg:"顾客列表" 
  }) 
})

// 处理导出批次数据的API
router.get('/exportBatch',async (req, res) => {
  const { batch, batchSize } = req.query; // 获取请求参数
  // 获取批次号,将一个字符串类型的批次号转换为一个整数
  const batchNumber = parseInt(batch, 10)
  // 生成该批次的数据,从数据库中分页获取数据
  let data = await CustomModel.find().skip((batchNumber - 1) * batchSize).limit(batchSize)
  data = data.map(item => {
    return item = {
      _id: item._id.toString(),
      name: item.name,
      age: item.age,
      sex: item.sex,
      birth: item.birth,
      address: item.address 
    }
  }) 
  const jsonData = data
  // 将数据转换为Excel表格
  const ws = XLSX.utils.json_to_sheet(jsonData)
  const wb = XLSX.utils.book_new() 
  
  // 添加数据所在的工作表
  XLSX.utils.book_append_sheet(wb, ws, `Batch${batchNumber}`) 

  // 保存文件到服务器
  const filePath = path.join(__dirname, "file", `batch${batchNumber}.xlsx`)
  XLSX.writeFile(wb, filePath)

  // 返回成功响应
  res.send({
    code: 200,
    msg : `Batch ${batchNumber} exported.` 
  })
})

// 合并导出的批次数据并生成一个Excel文件的API
router.get('/mergeExports', (req, res) => {
  const { batchCount } = req.query;
  let allData = []; // 存储所有批次的数据 

  try {
    // 合并每个批次的文件
    for (let i = 0; i < batchCount; i++) {
      // 读取每个批次的文件
      const filePath = path.join(__dirname, "file", `batch${i + 1}.xlsx`);
      const workbook = XLSX.readFile(filePath, { sheetStubs: true });
      const ws = workbook.Sheets[`Batch${i + 1}`];
      const jsonData = XLSX.utils.sheet_to_json(ws);

      // 将该批次的数据添加到allData数组中
      allData = allData.concat(jsonData);
      // 删除批次文件
      fs.unlinkSync(filePath);
    }

    // 创建一个新的工作簿和工作表
    const wb = XLSX.utils.book_new();
    const ws = XLSX.utils.json_to_sheet(allData);

    // 将工作表添加到工作簿
    XLSX.utils.book_append_sheet(wb, ws, 'MergedData');

    // 将合并后的工作簿写入缓冲区
    const buffer = XLSX.write(wb, { type: 'buffer', bookType: 'xlsx' });

    // 设置响应头，准备下载文件
    res.setHeader('Content-Disposition', 'attachment; filename="large-data.xlsx"');
    res.setHeader('Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');

    // 发送缓冲区数据作为响应
    res.send(buffer);
  } catch (error) {
    // 如果发生错误，则返回错误信息
    res.status(500).send({ error: error.message });
  }
})

module.exports = router;  